/**
 * ========== API请求 ==========
 * 书写规则说明:
 * 1，封装了两个基础的ajax方法；主要是因为原有接口和新接口的数据传递格式有变化；要根据不同接口情况使用不同的方法：
 *    ajax_post: application/x-www-form-urlencoded，
 *    ajax_post_json: application/json
 *
 * 2，参数格式规则: {arg1:val1, arg2: val2，arg3: val3 ……}
 *    在保持api请求参数只占一个参数位的原则下，尽量简洁而方便的调用api；
 *    因此，如果接口只需要一个参数，则api方法应该书写为只需要传入对应val值即可（参考 api.clientConsult() ）
 *    其他一个以上的参数，则保持对象格式传入；
 *
 * */


let api = {
    /** 获取用户信息 */
    getUserInfo: function (cb) {
        ajax_post("/User/getUserInfo", null, {
            succ: function (json) {
                cb && cb.succ && cb.succ(funs.mappingUser(json.user));
            },
            fail: function (data) {
                cb && cb.fail && cb.fail(data);
            }
        })
    },
    /** 获取ip定位省市 */
    new_ipLocation: function (cb) {
        ajax_post("/Ip/getIpInfo", null, {
            succ: function (json) {
                cb && cb.succ && cb.succ(json.ip_info);
            },
            fail: function (data) {
                cb && cb.fail && cb.fail(data);
            }
        });
    },
    /** 统计关注微信欢迎语的点击率 */
    event_welcome: function () {
        ajax_post("/Ip/getIpInfo", { event: 'welcome' });
    },
    /** 初始化数据 */
    getInitData: function (cb) {
        ajax_post("/Index/getInitData",null,cb);
    },
    /** 获取项目详情 */
    getDemandInfo: function (data,cb) {
        ajax_post("/Demand/getInfo",data,{
            succ: function (json) {
                globalData.pack.bid_point = json.info.leave_bid_point;
                let info = funs.mappingDemand(json.info);
                cb && cb.succ && cb.succ(info);
            },
            fail: function (json) {
                cb && cb.fail && cb.fail(json);
            }
        });
    },
    /** 获取项目参与的工程商列表 */
    getParticInfo: function (data,cb) {
        ajax_post("/Demand/getParticInfo",data,{
            succ: function (json) {
                json.partic_supplier_list = funs.mappingDemandSupplier(json.partic_supplier_list);
                cb && cb.succ && cb.succ(json);
            },
            fail: function (data) {
                cb && cb.fail && cb.fail(data);
            }
        });
    },
    /** 获取项目列表(升序) */
    getDemandList: function (data,cb) {
        data = $.extend({}, { pagesize: 20, sort: "published_at", order: "asc" }, data);
        ajax_post("/Demand/getDemandList",data,{
            succ: function (json) {
                let list = json.list.map(function (item) {
                    return funs.mappingDemand(item);
                });
                cb && cb.succ && cb.succ(list);
            },
            fail: function (data) {
                cb && cb.fail && cb.fail(data);
            }
        });
    },
    /** 获取项目列表(降序) */
    getDemandListDesc: function (data,cb) {
        data = $.extend({}, data, { pagesize: 20, sort: "published_at", order: "desc" });
        ajax_post("/Demand/getDemandList",data,{
            succ: function (json) {
                let list = json.list.map(function (item) {
                    return funs.mappingDemand(item);
                });
                cb && cb.succ && cb.succ(list);
            },
            fail: function (data) {
                cb && cb.fail && cb.fail(data);
            }
        });
    },
    /** 获取今日订单数量 */
    getTodayCnt: function (data,cb) {
        ajax_post("/Supplier/Demand/getTodayCnt",data,cb);
    },
    /** 修改用户信息 */
    updateUserInfo: function (data,cb) {
        ajax_post("/User/updateUser",data,cb);
    },
    /** 获取套餐信息 */
    getMyPack: function (cb) {
        ajax_post("/Supplier/Pack/getMyPack",null,cb);
    },
    /** 获取套餐信息 */
    postForWxPay: function (type,cb) {
        ajax_post("/Supplier/Pack/postForWxPay",{"type":type},cb);
    },
    /** 修改服务类型 */
    UpdateServiceType: function (data,cb) {
        ajax_post("/supplier/tags",data,cb);
    },
    /** 修改服务区域 */
    updateServiceArea: function (data,cb) {
        ajax_post("/supplier/pack/area",data,cb);
    },
    /** 获取邀请列表 */
    getInviteList: function (cb) {
        ajax_post("/Supplier/invite/getList",null,cb);
    },
    /** 生成邀请卡 */
    createInvitCard: function (cb) {
        ajax_post("/Supplier/invite/create",null,cb);
    },
    /** 项目浏览量+1 */
    demandAddScan: function (data,cb) {
        ajax_post("/Demand/addScan",data,cb);
    },
    /** 上传头像 */
    uploadAvatar: function (data,cb) {
        ajax_post("/Img/uploadAvatar",data,cb);
    },
    /** 更新工程商信息 */
    activeSupplier: function (data,cb) {
        ajax_post("/Supplier/Supplier/activate",data,cb);
    },
    /** 更新工程商信息 */
    bidDemand: function (data,cb) {
        ajax_post("/Supplier/Demand/bid",data,cb);
    },
    /** 更新工程商信息 */
    feedback: function (data,cb) {
        ajax_post("/supplier/feedback",data,cb);
    },






};

/** ajax请求方法 */
function ajax_post(url, data, cb) {
    let URL = APIURL + url;
    $.ajax(URL, $.extend({
        method: 'POST',
        data: data,
        dataType: "json",
        timeout: 30000,
        xhrFields: {
            withCredentials: true
        },
        headers: {
            'Accept': 'application/x-www-form-urlencoded',
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        contentType: 'application/x-www-form-urlencoded',
        success: function (json, status, xhr) {
            cb && cb.always && cb.always(json);
            if (json.status == "200") {
                cb && cb.succ && cb.succ(json);
            } else {
                cb && cb.fail && cb.fail(json);
            }
        },
        error: function (xhr, status, thrown) {
            console.log("[!err!](" + url + "): status: " + xhr.status + ", msg: " + thrown);
            cb && cb.fail && cb.fail();
            console.error("接口[" + url + "]：失败");
        }
    }));
}
/** ajax请求方法 (application/json)*/
function ajax_post_json(url, data, cb) {
    let URL = APIURL + url;
    $.ajax(URL, $.extend({
        method: 'POST',
        data: JSON.stringify(data),
        dataType: "json",
        timeout: 30000,
        xhrFields: {
            withCredentials: true
        },
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
        contentType: 'application/json',
        success: function (json, status, xhr) {
            cb && cb.always && cb.always(json);
            if (json.status == "200") {
                cb && cb.succ && cb.succ(json);
            } else {
                cb && cb.fail && cb.fail(json);
            }
        },
        error: function (xhr, status, thrown) {
            console.log("[!err!](" + url + "): status: " + xhr.status + ", msg: " + thrown);
            cb && cb.fail && cb.fail();
            console.error("接口[" + url + "]：失败");
        }
    }));
}